/// @tags: DP
#include <cstdio>
#include <functional>
#include <iostream>
#include <numeric>

using std::cin, std::cout, std::endl;

namespace BlueQuantum {

typedef long long ll;

constexpr int maxn = 5e1 + 2, maxm = 5e1 + 2, maxk = 5e1 + 2, mod = 998244353;

int w[maxn], p[maxn][maxk], fac[maxn], invf[maxn];
int f[maxn][maxm][maxk];

ll qpow(ll base, int exp) {
  ll res = 1;
  for (; exp; exp >>= 1, base = base * base % mod)
    if (exp & 1) res = res * base % mod;
  return res;
}

int main() {
  int n, m, k;
  cin >> n >> m >> k;
  int sum = 0;
  for (int i = 1; i <= n; ++i) {
    cin >> w[i];
    sum += w[i];
  }
  fac[0] = 1;
  for (int i = 1; i <= k; ++i) fac[i] = (ll)fac[i - 1] * i % mod;
  invf[k] = qpow(fac[k], mod - 2);
  for (int i = k - 1; i >= 0; --i) invf[i] = (ll)invf[i + 1] * (i + 1) % mod;
  for (int i = 1; i <= n; ++i) {
    p[i][1] = (ll)w[i] * qpow(sum, mod - 2) % mod;
    for (int j = 2; j <= k; ++j) p[i][j] = (ll)p[i][j - 1] * p[i][1] % mod;
  }
  f[0][0][0] = 1;
  for (int i = 1; i <= n; ++i) {
    f[i][0][0] = f[i - 1][0][0];
    for (int j = 1; j <= m; ++j) {
      for (int h = j; h <= k; ++h) {
        f[i][j][h] = (f[i][j][h] + f[i - 1][j][h]) % mod;
        for (int l = 1; l <= h - j + 1; ++l)
          f[i][j][h] = (f[i][j][h] + (ll)f[i - 1][j - 1][h - l] * (ll)p[i][l] %
                                         mod * invf[l] % mod) %
                       mod;
      }
    }
  }
  cout << (ll)f[n][m][k] * fac[k] % mod;
  return 0;
}

}  // namespace BlueQuantum

int main() {
#ifndef ONLINE_JUDGE
#ifdef LOCAL
  freopen("/tmp/CodeTmp/testdata.in", "r", stdin);
  freopen("/tmp/CodeTmp/testdata.out", "w", stdout);
#else
  freopen("ABC243F Lottery.in", "r", stdin);
  freopen("ABC243F Lottery.out", "w", stdout);
#endif
#endif

  std::ios::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
  return BlueQuantum::main();
}
